#pragma once

#include<string>
#include"Location.h"

struct Symbol
{
	enum Type;

    std::string m_sName;
	Type		m_eSymbolType;
    std::string m_sTypePrefix;
    std::string m_sTypeSuffix;
	Location	m_xDeclaration;
	Location	m_xDefinition;

	Symbol()
	{
		m_eSymbolType = eSymbolInvalid;
	}

	Symbol(std::string sName, Symbol::Type eType, std::string sTypePrefix="", std::string sTypeSuffix="")
    {
        m_sName = sName;
		m_eSymbolType = eType;
        m_sTypePrefix = sTypePrefix;
        m_sTypeSuffix = sTypeSuffix;
    }

	bool operator < (Symbol xSymbol);
	void print();

	enum Type
	{
		eSymbolInvalid,
		eSymbolFunction,
		eSymbolVariable,
		eSymbolDataType,
		eSymbolAttribute
	};

};

struct SymbolLessThan
{
  bool operator()(Symbol xSymbol1, Symbol xSymbol2) const
  {
	  return xSymbol1.m_sName == xSymbol2.m_sName;
  }

};